home *** CD-ROM | disk | FTP | other *** search
- page 96,132
- ;§∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞§
- ;§ §
- ;§ ディレクトリエントリ ソート ユーティリティ §
- ;§ §
- ;§ DSORT.EXE Ver1.30 §
- ;§ §
- ;§ Copyright (C) by 福地 邦雄 1991-1992. All rights reserved. §
- ;§∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞§
- .MODEL SMALL,C
- ;
- DPB struc
- drivenumber db ? ;ドライブ番号
- unitnumber db ? ;ユニット番号
- sectorlength dw ? ;セクタ長
- sectorperalloc db ? ;1クラスタ当たりのセクタ数-1
- shiftcount db ? ;1クラスタ当たりのセクタ数の2のべき乗
- reservedsector dw ? ;先頭のリザーブセクタ数
- numberoffat db ? ;FAT数
- directoryentry dw ? ;ルートディレクトリのエントリ数
- datastartsector dw ? ;データ領域開始セクタ番号
- datasector dw ? ;最大クラスタ数(全クラスタ数+1)
- fatsector dw ? ;1FAT当たりのセクタ数
- directorystart dw ? ;ディレクトリ領域開始セクタ番号
- todeviceheader dd ? ;デバイスヘッダへのポインタ
- mediadescriptor db ? ;メディアディスクリプタ
- diskchange db ? ;ディスクの交換可能属性
- tonextdpb dd ? ;次のDPBへのポインタ
- currentcluster dw ? ;カレントクラスタ
- reserved db 3 dup(?) ;リザーブ
- DPB ends
- ;
- DSKPACKET struc
- sectornum dd ? ; 32bitセクタ番号
- rwcount dw ? ; READ/WRITEセクタ数
- dskbuffer dd ? ; バッファアドレス
- DSKPACKET ends
- ;
- YES equ 1
- NO equ 0
- HEAD equ 0
- BS equ 8
- TAB equ 9
- CR equ 0dh
- LF equ 0ah
- ;
- .data
- ;
- public sweep, sortexec,recursive,dirgather,subsearch
- public dta, srchname,namebuff,namebuffsiz
- public dirtype,fattype,attribute,clustcount,clustsect,entrycount
- public fatdrive,driveno,clustsize,sectcount
- public fatbuff,dirbuff,sortbuff,sortcount,drvinf,movecount
- public sortfuncs,subchain,wildcard,pathbuff,usagemsg,msgsize
- public procs,dirover,bothmsg,sortmsg,movemsg,nothmsg
- ;
- public dos4,sect32,diskaccs
- ;
- EVEN
- sweep dw YES ; ソート対象外のエントリを先頭に集める
- sortexec dw YES ; ソートを行う
- recursive dw NO ; サブディレクトリを再帰的に処理する
- dirgather dw HEAD ; サブディレクトリを集める方向
- subsearch dw NO ; 再帰処理内で '.','..'を含まないように判断
- attribute dw ? ; ソート対象とするファイル属性を反転したもの
- ;
- dta dd ? ; ディレクトリサーチ用Disk Transfer Address
- srchname dd ? ; ディレクトリサーチ名
- namebuff dd ? ; ディレクトリ名バッファ
- namebuffsiz dw 4096 ; ディレクトリ名バッファサイズ
- ;
- dirtype dw ? ; ディレクトリタイプ ルート:サブ
- fattype dw ? ; FATタイプ 12bit:16bit
- clustsect dw ? ; 1クラスタのセクタ数
- sectcount label word ; ルートディレクトリのセクタ数
- clustcount dw ? ; サブディレクトリのクラスタ数
- clustsize dw ? ; 1クラスタのバイトサイズ
- entrycount dw ? ; ディレクトリの最大エントリ数
- ;
- dos4 dw ? ; DOS V4.xxフラグ
- sect32 dw ? ; 32bitセクタ番号サポートフラグ
- ;
- fatdrive dw -1 ; FATドライブ番号
- driveno dw -1 ; DPBドライブ番号
- fatbuff dw ? ; FATバッファのセグメント
- dirbuff dw ? ; ディレクトリバッファのセグメント
- sortbuff dw ? ; ソートバッファのセグメント
- sortcount dw ? ; ソート対象エントリ数
- movecount dw ? ; 先頭詰め対象エントリ数
- ;
- drvinf DPB <> ; DPBのコピー
- ;
- diskaccs DSKPACKET <> ; 32bitセクタ番号ディスクアクセスパケット
- ;
- sortfuncs dw 33 dup(?) ; ソート用比較関数のリスト
- ;
- wildcard db '\*.*',0 ; ワイルドカード
- pathbuff db 96 dup(?) ; ディレクトリサーチ用パス名バッファ
- ;
- procs db '処理中',TAB,TAB,' $'
- dirover db 'ディレクトリが512KB以上',CR,LF,'$'
- ;
- bothmsg db 'エントリをソート/移動',CR,LF,'$'
- sortmsg db 'エントリをソート',CR,LF,'$'
- movemsg db 'エントリを移動',CR,LF,'$'
- nothmsg db '対象エントリなし',CR,LF,'$'
- ;
- usagemsg label byte ; ヘルプメッセージ
- db TAB," ディレクトリ エントリ ソート ユーティリティ 1992/10/01 Ver1.30",CR,LF
- db " Copyright (C) by 福地 邦雄 1991-1992. All rights reserved.",CR,LF
- db "使い方:DSORT <オプション> ディレクトリーパス名・・・",CR,LF
- db TAB,"-? -->ソート条件指定 +? -->ソート対象選択",CR,LF
- db " -f -F フルネーム 11文字",TAB,"+g +G サブディレクトリを先頭(小文字)又は末尾(大文字)",CR,LF
- db " -n -N ファイルネーム 8文字",TAB," に寄せる(無指定時はファイルと同格に扱う)",CR,LF
- db " -e -E 拡張子 3文字",TAB,"+t ツリー構造の下部まで再帰的にソート",CR,LF
- db " -s -S ファイルサイズ",TAB,TAB,"+a +d +v +s +h +r 各属性エントリを対象に加える",CR,LF
- db " -d -D 最終更新日付",TAB,TAB," a=アーカイブ d=ディレクトリ v=ボリュームラベル s=システムファイル",CR,LF
- db " -t -T 最終更新時刻",TAB,TAB," h=隠しファイル r=リードオンリー 初期指定値= +adr",CR,LF
- db "デフォルト= -f (フルネーム・昇順) +n ソートを行わない 削除エントリ分を詰めるだけ",CR,LF
- db TAB,TAB,TAB,TAB,"+f ソート対象でないエントリを先頭に詰めない",CR,LF
- db "小文字=昇順 大文字=降順 複数指定可能で、指定した順番に比較する。",CR,LF
- db "+a~+rの指定は トグルスイッチ になっていて、2回指定するとソート対象から外れる。",CR,LF
- db "ディレクトリーパス名は必ず指定すること。 カレントの場合は'.'を、ルートの場合は'\'を使用する。",CR,LF
- msgsize = $-offset usagemsg
- ;
- EVEN
- subchain dw ? ; サブディレクトリのFATチェイン
- ;
- .stack
- ;
- end